\section{Observer}
\label{moderneregulering-observer}
I design af tilbagekobling for systemet blev det antaget, at følgende tilstande er kendte $\textbf{x} = [\theta_\text{last}~\dot{\theta}_\text{last}~\dot{x}_\text{slæde}~\dot{l}_\text{s}]^T$. Dette er imidlertidlig ikke korrekt, da $\dot{\theta}_\text{last}$ ikke bliver målt. Da vinkelhastigheden anvendes i reguleringen er det nødvendigt at anvende en observer. En observer, også kaldet en estimator, estimere de ukendte tilstande ud fra en model af systemet. Disse estimater, kaldet $\mathbf{\hat{x}}$, kan derefter anvendes i stedet for de rigtige tilstande $\mathbf{x}$. 

Der er basalt to måder at fremstille en observer på, som fuldordens - eller som reduceret ordens observer. Da der kun er en tilstand, der er ukendt, vil det være nok med en reduceret ordens observer, der kun estimerer vinkelhastigheden. En fuldordens observer rekonstruerer hele tilstandsvektoren, hvilket i dette tilfælde vil give redundans. Det vurderes dog stadig at en fuldordens observer vil fungere bedst, da en observer udover at estimere også implementerer en filterfunktion på målingerne \citep[s.490]{Feedback:book}. Dette er attraktivt, da der forekommer støj på de målte tilstande. Da der ikke mangler processeringskraft er redundansen ikke noget problem og der vælges derfor, at designe en fuldordens observer. Et kriterium for, at der kan laves en observer, for systemet er observerbarhed. Da det tidligere viste sig at systemet er observerbart kan der arbejdes videre med design af fuldordens observeren.

En fuldordens observer tager udgangspunkt i en fuldordens model af systemet. Ved at føre input igennem denne fuldordens model af systemet vil observeren kunne give et estimat $\mathbf{\hat{x}}$ af tilstandsvektoren, hvilket er gjort på figur \ref{fig:moderneregulering-observerdiagram}.
\begin{figure}[H] %Blokdiagram af observer
\centering
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
% We start by placing the blocks
\coordinate [label = above:$-r$](referenceInput);
\node [sum, node distance = 0.8 cm, right of = referenceInput](referenceSum){};
\node [block, color=orange, right of = referenceSum, node distance = 1 cm](antiProduct){$\prod$};
\node [block, color=green!60!black, right = 0.5 cm, right of = antiProduct, node distance = 1 cm](feedbackInt){$\int$};
\coordinate [below = 5 cm, below of = referenceSum](belowReferenceSum);
\node [block, color=green!60!black, right of = feedbackInt, node distance = 1.5 cm](feedbackFi){$F_I$};
\node [sum, right of = feedbackFi, node distance = 1 cm](feedbackSum){};
\coordinate [right = -1.5 cm, right of = feedbackSum](sharedU);
\coordinate [right = -1.3 cm, right of = sharedU, label = above:$u$](systemU);
\node [block, right of = systemU, node distance = 1 cm](systemSat){\pgftext{\includegraphics[scale=0.15]{billeder/saturation}}};
\coordinate [right = -1 cm, right of = systemSat, label = above:$u_\text{sat}$](systemUsat);
\coordinate [below = 1.7 cm, below of = sharedU](belowSharedU);
\coordinate [below = 1.7 cm, below of = systemU, label = above:$\hat{u}$](observerU);
\node [block, color = blue, below = 1.7 cm, below of = systemSat](observerSat){\pgftext{\includegraphics[scale=0.15]{billeder/saturation}}};
\coordinate [below = 1.7 cm, below of = systemUsat, label = above:$\hat{u}_\text{sat}$](observerUsat);
\node [sum, below of = observerU, node distance = 1.2 cm](antiSum){};
\coordinate [above = -1.7 cm, above of = antiSum, label = left:\tiny{$+$}];
\coordinate [below = -1.7 cm, below of = antiSum, label = right:\tiny{$-$}];
\coordinate [left = -0.9 cm, left of = antiSum](rightAntiArc);
\coordinate [left = -1.8 cm, left of =rightAntiArc](leftAntiArc);
\node [block, right = 1.5 cm, right of = systemSat, node distance = 1 cm](systemB){$B$};
\node [sum, right of = systemB, node distance = 1 cm](systemSum){};
\node [block, right of = systemSum, node distance = 1 cm](systemInt){$\int$};
\node [block, right of = systemInt, node distance = 1.5 cm](systemC){$C$};
\node [block, below of = systemInt, node distance = 1.2 cm](systemA){$A$};
\node [block, right of = systemA, node distance = 1.5 cm](systemCo){$C_O$};
\coordinate [right = -1 cm, right of = systemC, label = above:$y$](systemY);
\coordinate [right = -1.4 cm, right of = systemY](rightSystemY);
\coordinate [right = -1 cm, right of = systemCo, label = right:$z$](systemZ);
\draw [->] (systemInt) -- node[name = systemX]{$x$} (systemC);
\coordinate [below = -0.6 cm, below of = systemX](belowSystemX);
\node [sum, color=red, below of = systemZ, node distance = 1.3 cm](observerGainSum){};
\node [block, color=red, below of = systemA, node distance = 1.3 cm](observerGainL){$L$};
\node [block, color=blue, below = 2.7 cm, below of = systemB, node distance = 1 cm](observerB){$B$};
\node [sum, color=blue, right of = observerB, node distance = 1 cm](observerSum){};
\node [block, color=blue, right of = observerSum, node distance = 1 cm](observerInt){$\int$};
\node [block, color=blue, right of = observerInt, node distance = 1.5 cm](observerC){$C$};
\node [block, color=blue, below of = observerInt, node distance = 1.2 cm](observerA){$A$};
\coordinate [right = -1 cm, right of = observerC, label = right:$\hat{z}$](observerZ);
\draw [->, color=blue] (observerInt) -- node[name = observerX, color = black]{$\hat{x}$} (observerC);
\coordinate [below = -0.5248 cm, below of = observerX](belowObserverX);
\node [block, color=green!60!black, below of = observerA, node distance = 1.3 cm](feedbackF){$F$};
\node [block, color=orange, left = 0.7 cm, left of = leftAntiArc, node distance = 1 cm](antiSwitch){$Switch$};
% We then draw box
\coordinate [above = -1.2 cm, right = -1.2 cm, above of = systemC, right of = systemC](systemBoxRT);
\coordinate [above = -1.2 cm, left = -1.2 cm, above of = systemSat, left of = systemSat](systemBoxLT);
\coordinate [below = -0.15 cm, right = -1.2 cm, below of = systemC, right of = systemC](systemBoxRB);
\coordinate [below = -0.15 cm, left = -1.2 cm, below of = systemSat, left of = systemSat](systemBoxLB);
\draw [dashed, color=cyan] (systemBoxLT) -- (systemBoxRT) -- (systemBoxRB) -- (systemBoxLB) -- (systemBoxLT);
\coordinate [above = -1.8 cm, above of = systemBoxLB, label = right:$\tiny{{\color{cyan}\text{Udvidet system}}}$];
% We then draw lines
\draw [->, color=green!60!black] (referenceInput) -- (referenceSum);
\draw [->, color=green!60!black] (feedbackInt) --node[color = black]{$x_I$} (feedbackFi);
\draw [->, color=green!60!black] (feedbackFi) -- (feedbackSum);
\draw [->, color=green!60!black] (systemY) -- (rightSystemY) |- (belowReferenceSum) -- (referenceSum);
\draw [->, color=green!60!black] (antiProduct) -- (feedbackInt);
\draw [->, color=green!60!black] (referenceSum) -- (antiProduct);
\draw [-] (feedbackSum) -- (systemU);
\draw [->] (systemU) -- (systemSat);
\draw [-] (systemSat) -- (systemUsat);
\draw [->] (systemUsat) -- (systemB);
\draw [->] (systemB) -- (systemSum);
\draw [->] (systemSum) -- (systemInt);
\draw [->] (systemX) |- (belowSystemX) -- (systemA);
\draw [->] (belowSystemX) -- (systemCo);
\draw [->] (systemA) -| (systemSum);
\draw [-] (systemC) -- (systemY);
\draw [-] (systemCo) -- (systemZ);
\draw [->, color=green!60!black] (belowObserverX) |- (feedbackF);
\draw [->, color=green!60!black] (feedbackF) -| (feedbackSum);
\draw [->, color=orange] (observerU) -- (antiSum);
\draw [->, color=orange] (observerUsat) |- (antiSum);
\draw [-, color=orange] (antiSum) -- (rightAntiArc);
\draw [color = orange] (rightAntiArc) arc (0:180:0.1 cm);
\draw [->, color=orange] (leftAntiArc) -- (antiSwitch);
\draw [->, color=orange] (antiSwitch) -| (antiProduct);
\coordinate [left = -1.5 cm, left of = leftAntiArc, label = above:$u_e$](antiUe);
\coordinate [left = -1 cm, left of = antiSwitch, label = above:$u_s$](antiUe);
\draw [->, color=red] (systemZ) -- (observerGainSum);
\draw [->, color=red] (observerZ) -- (observerGainSum);
\coordinate [above = -1.7 cm, above of = observerGainSum, label = right:\tiny{$-$}];
\coordinate [below = -1.7 cm, below of = observerGainSum, label = right:\tiny{$+$}];
\draw [->, color=red] (observerGainSum) -- (observerGainL);
\draw [->, color=red] (observerGainL) -| (observerSum);
\draw [->, color=blue] (observerB) -- (observerSum);
\draw [->, color=blue] (observerSum) -- (observerInt);
\draw [->, color=blue] (observerX) -- (belowObserverX) -- (observerA);
\draw [->, color=blue] (observerA) -| (observerSum);
\draw [-, color=blue] (observerC) -- (observerZ);
\draw [->, color=blue] (sharedU) |- (observerSat);
\draw [->, color=blue] (observerSat) -- (observerB);
\end{tikzpicture}
\caption{Systemdiagram med {\color{green!60!black}tilstandstilbagekobling}, {\color{orange}anti-windup}, {\color{blue}observermodel} og {\color{red}observerforstærkning}.}
\label{fig:moderneregulering-observerdiagram}
\end{figure}
Da alle tilstande skal estimeres i fuldordens observeren laves estimeringen ud fra information om alle output. Der laves derfor en outputmatrix $\mathbf{C_O}$ der giver output \textbf{z} så både $x$-, $y$-hastighed og vinkel kan anvendes til at estimere tilstandene ud fra. Observeroutputmatrixen og observeroutput er som vist i henholdsvis formel \eqref{eq:observer-co} og \eqref{eq:observer-z}.
\begin{IEEEeqnarray}{l}
\label{eq:observer-co}
\mathbf{C_O} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}\\\nonumber\\
\label{eq:observer-z}
\mathbf{z} = \begin{bmatrix} \theta_{\text{last}} & \dot{x}_{\text{slæde}} & \dot{l}_{s} \end{bmatrix}^T
\end{IEEEeqnarray}
Da modellen sjældent afspejler det virkelige system helt præcist vil der forekomme en fejl mellem de virkelige tilstande og de estimerede tilstande. Det kan dog vises, at hvis systemet fra udgangspunkt er et stabilt system så vil denne fejl konvergere mod nul. For at have en indflydelse på hvor hurtig denne konvergens foregår, implementeres der tilbagekobling i observeren. Ved at føre fejlen mellem det rigtige output $z$ og det estimerede output $\hat{z}$ tilbage i observeren, kan der, via en forstærkning \textbf{L}, styres hvor hurtig denne konvergens sker. Observer forstærkningen, \textbf{L}, kan designes på samme vis som tilbagekoblingen i afsnit \ref{moderneregulering-tilbagekobling}, ud fra den ønskede placering af observer poler. En tommelfingerregel for placering af observerpoler er at de kan vælges 2-6 gange hurtigere end tilbagekoblingspolerne \citep[s.494]{Feedback:book}. På denne vis bliver dynamikken, for hvor hurtigt fejlen formindskes, hurtigere end det kontrollerede system. Det ønskes dog ikke for hurtigt, da filtereffekten derved mindskes.

I designet af tilbagekoblingen blev der anvendt $\textbf{F} = -\text{place}(\textbf{A},\textbf{B},\textbf{p})$ til at designe \textbf{F} således, at lukketsløjfepolerne for \textbf{A + BF} kom til at ligge i polerne $\textbf{p}$. Observeren er dog designet som \textbf{A + LC} så for, at anvende place$()$ kommandoen omskrives der som vist i ligning \eqref{eq:observer-alc}.
\begin{IEEEeqnarray}{l}
\label{eq:observer-alc}
\mathbf{(A + LC)' = A' + C'L'}
\end{IEEEeqnarray}
Da det er \textbf{L} og ikke \textbf{L'}, der skal bestemmes, ender funktionskaldet med at være; $\textbf{L} = -\text{place}(\textbf{A}',\textbf{C}',\textbf{p}_\text{obs})'$. Det endelige design af observeren er foretaget under dimensioneringen.